package com.example.cloud.util.spring;

import org.springframework.context.ApplicationContext;

/**
 * Spring手动获取Bean
 *
 * @author tongyufu
 * @since 2018年11月16日 下午5:42:10
 */
public class SpringContextUtils {

    private static ApplicationContext APPLICATION_CONTEXT;

    /**
     * Spring手动获取Bean
     *
     * @param applicationContext applicationContext
     */
    public SpringContextUtils(ApplicationContext applicationContext) {
        SpringContextUtils.APPLICATION_CONTEXT = applicationContext;
    }

    /**
     * 获取ApplicationContext
     *
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return APPLICATION_CONTEXT;
    }

    /**
     * 根据名称获取Bean
     *
     * @param beanName bean名称
     * @return bean
     */
    public static Object getBean(String beanName) {
        return APPLICATION_CONTEXT.getBean(beanName);
    }

    /**
     * 根据名称和Class获取Bean
     *
     * @param requiredType Bean类型
     * @param <T> Bean类型
     * @return bean
     */
    public static <T> T getBean(Class<T> requiredType) {
        return APPLICATION_CONTEXT.getBean(requiredType);
    }

    /**
     * 根据名称和Class获取Bean
     *
     * @param beanName bean名称
     * @param requiredType Bean类型
     * @param <T> Bean类型
     * @return bean
     */
    public static <T> T getBean(String beanName, Class<T> requiredType) {
        return APPLICATION_CONTEXT.getBean(beanName, requiredType);
    }
}
